package com.pxl.springbootinit.utils;

import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import org.apache.commons.lang3.RandomStringUtils;

public class FileUploadUtil {

    private static final String uploadDir = "src/main/resources/static/imgs";  // 根据实际需求设置路径

    // 上传文件到指定目录，并返回访问地址
    public static String uploadFile(MultipartFile file, Long userId, HttpServletRequest request) throws IOException {
        // 获取文件扩展名
        String originalFilename = file.getOriginalFilename();
        String fileExtension = getFileExtension(originalFilename);

        // 生成文件名（防止同名覆盖），并附加文件后缀
        String uuid = RandomStringUtils.randomAlphanumeric(8);
        String filename = uuid + fileExtension;

        // 获取项目的绝对路径，确保路径正确
        String projectDir = System.getProperty("user.dir");
        String filepath = projectDir + "/src/main/resources/static/imgs/" + userId;

        // 创建目标文件路径
        Path uploadPath = Paths.get(filepath);

        // 如果目录不存在，创建目录
        if (!Files.exists(uploadPath)) {
            Files.createDirectories(uploadPath);
        }

        // 拼接文件路径
        Path filePath = uploadPath.resolve(filename);

        // 保存文件到目标路径
        file.transferTo(filePath.toFile());

        // 获取主机 IP 地址和端口
        String serverName = request.getServerName(); // 获取主机名 (例如 localhost)
        int serverPort = request.getServerPort(); // 获取端口号 (例如 8101)

        // 构建文件的访问 URL，假设 "/imgs/" 是映射到 static/imgs 目录的路径
        String fileUrl = "http://" + serverName + ":" + serverPort + "/api/imgs/" + userId + "/" + filename;

        return fileUrl;  // 返回文件的访问 URL
    }


    public static String uploadFile(MultipartFile file, String adminInfo, HttpServletRequest request) throws IOException {
        // 获取文件扩展名
        String originalFilename = file.getOriginalFilename();
        String fileExtension = getFileExtension(originalFilename);

        // 生成文件名（防止同名覆盖），并附加文件后缀
        String uuid = RandomStringUtils.randomAlphanumeric(8);
        String filename = uuid + fileExtension;

        // 获取项目的绝对路径，确保路径正确
        String projectDir = System.getProperty("user.dir");
        String filepath = projectDir + "/src/main/resources/static/imgs/" + adminInfo;

        // 创建目标文件路径
        Path uploadPath = Paths.get(filepath);

        // 如果目录不存在，创建目录
        if (!Files.exists(uploadPath)) {
            Files.createDirectories(uploadPath);
        }

        // 拼接文件路径
        Path filePath = uploadPath.resolve(filename);

        // 保存文件到目标路径
        file.transferTo(filePath.toFile());

        // 获取主机 IP 地址和端口
        String serverName = request.getServerName(); // 获取主机名 (例如 localhost)
        int serverPort = request.getServerPort(); // 获取端口号 (例如 8101)

        // 构建文件的访问 URL，假设 "/imgs/" 是映射到 static/imgs 目录的路径
        String fileUrl = "http://" + serverName + ":" + serverPort + "/api/imgs/" + adminInfo + "/" + filename;

        return fileUrl;  // 返回文件的访问 URL
    }


    // 获取文件扩展名
    private static String getFileExtension(String filename) {
        if (filename != null && filename.contains(".")) {
            return filename.substring(filename.lastIndexOf("."));
        } else {
            return ".jpg"; // 默认扩展名为 .jpg
        }
    }
}
